package bszt.huawei;

import java.util.*;

public class Code01 {

    /**
     * 现有一个狭小的老鼠洞，每次仅能一只老鼠进或者出（类似于栈的特性），如果通道里有多只老鼠，那么先进洞的老鼠会比晚进洞的老鼠出来更晚
     * 假如有一窝老鼠来串门，我们给每只老鼠单独编个数字号码，1、2、3...
     * 允许老鼠进洞后，又出洞，再次进洞，且若众多老鼠都挤满到洞口了，则不再会有老鼠进洞，最后出洞的顺序就按洞口到洞底的老鼠编号输出
     * 假如老鼠进洞的顺序是1、2、3，那么可能的出洞顺序是3、2、1，考虑到洞未满的情况下，老鼠进洞后又出洞了，也可能是1、2、3等，但不可能是3、1、2
     * 现给定一个进洞序列，序列里数字可能重复，重复表示出洞后再次进洞，假定序列最后洞是满的，序列长度小于10000。\
     * 即老鼠编号范围是[1,10000]
     * 请给出老鼠出洞的顺序？
     * <p></p>
     * 输入格式：
     * 1 2 3 2 3 4 5
     * <p></p>
     * 输出格式：
     * 3 2 5 4 3 2 1
     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] nums = sc.nextLine().split(" ");
        List<Integer> list = Arrays.stream(nums).map(Integer::parseInt).toList();
        int len = list.size();
        List<Integer> res = new ArrayList<>(len);

        Stack<Integer> stack = new Stack<>();
        Set<Integer> occ = new HashSet<>();

        for (Integer num : list) {
            if (occ.contains(num)) {
                while (!stack.isEmpty() && stack.peek() != num) {
                    int top = stack.pop();
                    res.add(top);
                    occ.remove(top);
                }
                if (!stack.isEmpty() && stack.peek() == num) {
                    res.add(num);
                }
            } else {
                occ.add(num);
                stack.push(num);
            }
        }

        while (!stack.isEmpty()) {
            res.add(stack.pop());
        }

        for (Integer r : res) {
            System.out.print(r + " ");
        }
    }
}
